<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files.  Please see the user guide for info:
|
|	https://codeigniter.com/user_guide/general/hooks.html
|	https://codeigniter.org.cn/user_guide/general/hooks.html
|
*//*
	挂钩点
		以下是所有可用挂钩点的一份列表：
		
		pre_system 在系统执行的早期调用，这个时候只有 基准测试类 和 钩子类 被加载了， 还没有执行到路由或其他的流程。
		pre_controller 在你的控制器调用之前执行，所有的基础类都已加载，路由和安全检查也已经完成。
		post_controller_constructor 在你的控制器实例化之后立即执行，控制器的任何方法都还尚未调用。
		post_controller 在你的控制器完全运行结束时执行。
		display_override 覆盖 _display() 方法，该方法用于在系统执行结束时向浏览器发送最终的页面结果。 这可以让你有自己的显示页面的方法。注意你可能需要使用 $this->CI =& get_instance() 方法来获取 CI 超级对象，以及使用 $this->CI->output->get_output() 方法来 获取最终的显示数据。
		cache_override 使用你自己的方法来替代 输出类 中的 _display_cache() 方法，这让你有自己的缓存显示机制。
		post_system 在最终的页面发送到浏览器之后、在系统的最后期被调用。
 */

$hook['post_controller'] = function ()
{
	// TODO remove it in production
	// 前端协调方案一：模板数据统一调试打印——H5前打印？
	# $this->CI =& get_instance();
	# $this->CI->input->get('debug') && print_r($this->CI->load->get_vars());
};

$hook['display_override'] = function ()
{
	// TODO remove it in production
	// 前端协调方案二：模板数据统一调试打印——H5后打印！
	$this->CI =& get_instance();
	$output = $this->CI->output->get_output();
	$debugs = $this->CI->input->get('debug') ? sprintf('<pre>%s</pre>', print_r($this->CI->load->get_vars(), true)) : '';
	echo $output . $debugs;
	
	// FIXME 这里打印的 Session 内容并不是最新的？？？
	$session = $this->CI->input->get('debug') && $this->CI->input->get('ws') ? sprintf('<pre>%s</pre>', print_r($this->CI->session, true)) : '';
	echo $session;
};
